package 多线程.CompletableFuture异步编排;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 thenRun：只要上一个任务执行完毕，就开始执行thenRun任务；
 thenAccept：上一个任务执行完毕后，接收它的返回值，再开始执行thenAccept任务；
 thenApply：上一个任务执行完毕后，接收它的返回值，执行thenApplyAsync任务，并返回当前任务的返回值。
 */
public class ThreadTest05 {
    // 自定义线程池
    public static final ExecutorService executorService = Executors.newFixedThreadPool(10);

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> {
            System.out.println("任务A开始执行...");
            int i = 100 / 20;
            System.out.println("任务A执行完毕, 运行结果:" + i);
            return i;
        }, executorService).thenRun(() -> {
            System.out.println("任务B开始执行...");
        });
//        output：
//        任务A开始执行…
//        任务A执行完毕, 运行结果:5
//        任务B开始执行…
    }

}
